package com.testing.sunnycommon.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.testing.sunnycommon.mapper.SunnyVariableMapper;
import com.testing.sunnycommon.model.SunnyVariable;
import com.testing.sunnycommon.service.SunnyVariableService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Classname SunnyVariableServiceImpl
 * @Description 类型说明
 * @Date 2023/5/24 21:20
 * @Created by 特斯汀Roy
 */
@Service
public class SunnyVariableServiceImpl extends ServiceImpl<SunnyVariableMapper, SunnyVariable> implements SunnyVariableService {

    @Override
    public boolean saveOrUpdateVariable(SunnyVariable sunnyVariable) {
        //查询数据库中，pid和varName跟传入参数一致的数据
//        select * from var where pid= sunnyVariable.getProjectId() and  varName= sunnyVariable.getVarName();
        //注意写的时候加上泛型
        //基本的queryWrapper通过字符串填写字段名，很可能出错
//        SunnyVariable existingVariable = getOne(new QueryWrapper<SunnyVariable>()
//                .eq("project_id", sunnyVariable.getProjectId())
//                .eq("varName", sunnyVariable.getVarName()));

        //字段变成通过lambda表达式来使用类中定义好的方法来编写，出错概率极小
        SunnyVariable existingVariable = getOne(new LambdaQueryWrapper<SunnyVariable>()
                .eq(SunnyVariable::getProjectId, sunnyVariable.getProjectId())
                .eq(SunnyVariable::getVarName, sunnyVariable.getVarName()));

        if (existingVariable != null) {
            //如果找到了重复的数据，并且传入的数据的id是0或者是查到的数据的id，才更新
            if (sunnyVariable.getId() == 0 || sunnyVariable.getId() == existingVariable.getId()) {
                //将传入的要存储的参数的id，设置为根据pid和name条件查到的数据 的id
                sunnyVariable.setId(existingVariable.getId());
                return updateById(sunnyVariable);
            } else {
                return false;
            }
        }
        //如果带着id来了，并且没有跟pid和name一致的数据，那就直接按id更新或者新增。
        //覆盖前端，直接带着id来进行修改或者新增的场景。
        return saveOrUpdate(sunnyVariable);
    }

    @Override
    public String replaceVariables(Long projectId, String origin) {
        //查询出项目中所有的变量
        List<SunnyVariable> variableList = list(new LambdaQueryWrapper<SunnyVariable>()
                .eq(SunnyVariable::getProjectId, projectId));
        //然后每个变量进行遍历，去尝试替换字符串中{{变量名}}
        for (SunnyVariable variable : variableList) {
            origin = origin.replaceAll("\\{\\{" + variable.getVarName() + "\\}\\}", variable.getVarValue());
        }
        return origin;
    }


}
